package com.ms3ds.deviceData.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ms3ds.deviceData.domain.SensorData;
import com.ms3ds.deviceData.domain.vo.SensorDataVO;
import com.ms3ds.deviceData.domain.vo.AreaSensorDataVO;

/**
 * 传感器数据Mapper接口
 * 
 * @author zlw
 * @date 2025-09-21
 */
public interface SensorDataMapper 
{
    /**
     * 查询传感器数据
     * 
     * @param id 传感器数据主键
     * @return 传感器数据
     */
    public SensorData selectSensorDataById(Long id);

    /**
     * 查询传感器数据列表
     * 
     * @param sensorData 传感器数据
     * @return 传感器数据集合
     */
    public List<SensorData> selectSensorDataList(SensorData sensorData);

    /**
     * 查询传感器数据列表(包含传感器名称和设备名称)
     * 
     * @param sensorData 传感器数据查询条件
     * @return 传感器数据VO集合
     */
    public List<SensorDataVO> selectSensorDataVOList(SensorData sensorData);

    /**
     * 新增传感器数据
     * 
     * @param sensorData 传感器数据
     * @return 结果
     */
    public int insertSensorData(SensorData sensorData);

    /**
     * 修改传感器数据
     * 
     * @param sensorData 传感器数据
     * @return 结果
     */
    public int updateSensorData(SensorData sensorData);

    /**
     * 删除传感器数据
     * 
     * @param id 传感器数据主键
     * @return 结果
     */
    public int deleteSensorDataById(Long id);

    /**
     * 批量删除传感器数据
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSensorDataByIds(Long[] ids);

    /**
     * 查询固定设备的传感器数据
     * 
     * @param deviceId 设备ID
     * @param sensorId 传感器ID
     * @return 传感器数据VO集合
     */
    public List<SensorDataVO> selectFixedSensorData(@Param("deviceId") Long deviceId, @Param("sensorId") Long sensorId);

    /**
     * 查询固定设备的最新传感器数据
     * 
     * @param deviceId 设备ID
     * @param sensorId 传感器ID
     * @return 最新的传感器数据VO
     */
    public SensorDataVO selectLatestFixedSensorData(@Param("deviceId") Long deviceId, @Param("sensorId") Long sensorId);

    /**
     * 查询固定设备的最新传感器数据值
     * 
     * @param deviceId 设备ID
     * @param sensorId 传感器ID
     * @return 最新的传感器数据值
     */
    public Double selectLatestFixedSensorDataValue(@Param("deviceId") Long deviceId, @Param("sensorId") Long sensorId);

    /**
     * 查询固定水泵设备的最新传感器数据值
     * 
     * @param areaId 区域ID
     * @param deviceId 设备ID
     * @param sensorId 传感器ID
     * @return 最新的水泵传感器数据值
     */
    public Double selectLatestWaterSensorDataValue(@Param("areaId") Long areaId, @Param("deviceId") Long deviceId, @Param("sensorId") Long sensorId);

    /**
     * 查询ABC三个区域的水泵流量数据
     * 查询条件：区域名称包含A、B、C，设备名称为'水泵'，传感器名称为'水泵流量'且状态为1
     * 
     * @return 水泵流量数据列表，包含设备名称和最新数据值
     */
    public List<SensorDataVO> selectWaterPumpFlowDataFromABCAreas();

    /**
     * 查询指定矿山的固定传感器当日统计数据
     * 包括：风机的主通风机风压和风机电耗、风速测量仪的巷道风速、水泵的水泵流量
     * 
     * @param mineId 矿山ID
     * @return 指定矿山的固定传感器当日统计数据列表
     */
    public List<AreaSensorDataVO> selectMineAreaSensorDailyData(@Param("mineId") Long mineId);

    /**
     * 查询指定矿山7天的风机电耗数据
     * 根据mineId查询device表中对应的mineId下的device_name='风机'下的sensor表中的sensor_name='风机电耗'下的sensor_data表中的数据
     * 数据包括当天（包括当天）和前七天（加上当天一共7天）的电量数据，如果某天没有数据则为0
     * 
     * @param mineId 矿山ID
     * @return 7天的风机电耗数据列表，包含日期和电耗值的Map
     */
    public List<java.util.Map<String, Object>> selectMineSevenDayWindTurbineElectricData(@Param("mineId") Long mineId);
}
